fix shacheck for windows
authorWolf Vollprecht <w.vollprecht@gmail.com>
Thu, 6 Jan 2022 09:24:39 +0000 (10:24 +0100)
committerWolf Vollprecht <w.vollprecht@gmail.com>
Fri, 7 Jan 2022 09:08:36 +0000 (10:08 +0100)
src/lib/win32/basename.c
src/util_common.h
test/shacheck.c

index 61ae8a3bfe6d3e76d26c91ccf25651acb5e560e4..1b1c0b1a928853f902d2bf770c687a8c40507789 100644 (file)
@@ -5,6 +5,11 @@ char* basename(char* path)
 {
     // note this is not a proper basename implementation
     char *p = strrchr (path, '\\');
+    if (p == NULL)
+    {
+        // sometimes we pass paths on win with "/" seperators
+        p = strrchr(path, '/');
+    }
     return p ? p + 1 : (char *) path;
 
     // char full_path[MAX_PATH], drive[MAX_PATH], dir[MAX_PATH], filename[MAX_PATH], ext[MAX_PATH];
index 60d240368338c6cc4c8ab344dd8469ae8fba1ce7..1aad13cb899f1309f7f63802926ff1fa9402d314 100644 (file)
@@ -14,4 +14,9 @@
 
 void version();
 
+#ifdef _WIN32
+// add correct declaration for basename
+char* basename(char*);
+#endif
+
 #endif
index 995434299cc9babca00a57268dbc0eb314b72905..9e7ae88cf84852fd3154e157269e8c6217d9e548 100644 (file)
@@ -59,7 +59,6 @@ int main (int argc, char *argv[]) {
     char *cmd = untaint(argv[1]);
     char *outf = argv[2];
     char *echecksum = argv[3];
-
     char **args = calloc(argc-2, sizeof(void*));
 
     args[0] = cmd;
@@ -68,7 +67,15 @@ int main (int argc, char *argv[]) {
 
     int status;
 #ifdef _WIN32
-    status = system(cmd);
+    char* fullcmd = malloc(2000);
+    strcpy(fullcmd, args[0]);
+    for(int i=1; i<argc-3; i++)
+    {
+        strcat(fullcmd, " ");
+        strcat(fullcmd, args[i]);
+    }
+    status = system(fullcmd);
+    free(fullcmd);
 #else
     pid_t child_pid;
 
@@ -97,11 +104,11 @@ int main (int argc, char *argv[]) {
         exit(1);
     }
     /* Files must be smaller than 1MB  */
-    char data[1024*1024] = {0};
+    char* data = malloc(1024*1024);
     ssize_t len = read(in, data, 1024*1024);
     if(len < 0) {
         perror("");
-        printf("Unable to read from %s", outf);
+        printf("Unable to read from %s\n", outf);
         exit(1);
     }
     char *cksum = get_hash(data, len, ZCK_HASH_SHA256);
@@ -116,5 +123,6 @@ int main (int argc, char *argv[]) {
     for(int i=0; i<argc-3; i++)
         free(args[i]);
     free(args);
+    free(data);
     return 0;
 }
\ No newline at end of file